import { login, getUserInfo, getUserDetailById } from '@/api/user'
// 获取到 auth  Cookies 的两个参数方法
import { setToken, getToken, removeToken, setTime } from '@/utils/auth.js'
const state = {
  // 直接拿  Cookies 的token
  token: getToken(),
  userInfo: {}
}

const mutations = {
  // 这个setToken是个函数
  setToken(state, data) {
    // 这个是使用引入的获取数据 存放到 Cookies

    setToken(data)
    // 或者将token存储到state的token
    state.token = data
  },
  // 不仅仅删除了vuex中的 还删除了缓存中的
  removeToken(state) {
    state.token = null
    removeToken()
  },
  // 添加
  setUserInfo(state, data) {
    state.userInfo = { ...data }
  },
  // // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

const actions = {
  async login(store, data) {
    try {
      // 发请求
      const res = await login(data)
      // console.log(res)
      // const token = res.data.data
      // 响应拦截器封装了外面的data 所以可以直接使用res
      store.commit('setToken', res)
      setTime()
    } catch (error) {
      console.log('这里报错了')
      console.log(error)
    }
  },
  // 获取用户信息
  async getUserInfo(store) {
    // 获取数据，合并数据
    const simpleData = await getUserInfo()
    // console.log(simpleData)

    const detail = await getUserDetailById(simpleData.userId)
    const data = {
      ...simpleData,
      ...detail
    }
    // console.log(data)

    store.commit('setUserInfo', data)
    // 获取用户资料时 return 数据方便调用时直接使用
    return data
  },
  logout(store) {
    store.commit('removeToken')
    store.commit('removeUserInfo')
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

